package com.xinchao.dao;

import com.xinchao.model.Module;
import com.xinchao.model.dto.MenuModuleDTO;
import com.xinchao.model.dto.ModuleDTO;
import com.xinchao.model.vo.RoleModuleTreeVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 模块Mapper
 *
 * @author dxy
 * @date 2018/6/22 9:40
 */
public interface ModuleMapper {
	/**
	 * 保存模块
	 *
	 * @param module Module
	 */
	void insertModule(Module module);

	/**
	 * 修改模块
	 *
	 * @param module Module
	 */
	void updateModuleById(Module module);

	/**
	 * 角色模块列表
	 *
	 * @param status 状态
	 * @return List<RoleModuleTreeVO>
	 */
	List<RoleModuleTreeVO> listAllRoleModule(@Param("status") Integer status);

	/**
	 * 获取所有启用的模块
	 *
	 * @return List<ModuleDTO>
	 */
	List<ModuleDTO> listModule(@Param("status") Integer status);

	/**
	 * 通过角色ID获取模块ID
	 *
	 * @param roleId 角色ID
	 * @return List<Long>
	 */
	List<String> listModuleIdsByRoleId(Long roleId);

	/**
	 * 通过模块名称获取模块
	 *
	 * @param moduleName 模块名称
	 * @return Module
	 */
	Module getModuleByModuleName(String moduleName);

	/**
	 * 获取模块的子模块
	 *
	 * @param moduleId 模块ID
	 * @return List<ModuleDTO>
	 */
	List<ModuleDTO> listChildrenModule(Long moduleId);

	/**
	 * 通过模块ID获取角色ID列表
	 *
	 * @param moduleId 模块ID
	 * @return List<Long>
	 */
	List<Long> listRoleIdsFromRoleModuleByModuleId(Long moduleId);

	/**
	 * 通过模块ID删除模块
	 *
	 * @param moduleId 模块ID
	 */
	void deleteModuleById(Long moduleId);

	/**
	 * 获取用户所拥有的菜单模块
	 *
	 * @param userId  用户ID
	 * @return List<MenuModuleDTO>
	 */
	List<MenuModuleDTO> listMenuModuleByUserId(Long userId);

	/**
	 * 通过模块类型获取所有菜单ID
	 * @return
	 */
	List<String> listModuleIdByModuleType();

	/**
	 * 通过模块ID获取模块
	 *
	 * @param moduleId 模块ID
	 * @return Module
	 */
	Module getModuleByModuleId(Long moduleId);
}